package com.lzz.bottomencapsulation.app;

import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;

import com.lzz.bottomencapsulation.eventbus.MessageEvent;
import com.lzz.bottomencapsulation.statusbar.StatusBarUtil;
import com.lzz.bottomencapsulation.utils.LUtils;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;


public abstract class BaseActivity extends FragmentActivity {
    private  final String TAG = this.getClass().getName();
    protected BaseApplication baseApplication;
    protected boolean isInitView=false;//是否初始化视图

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        baseApplication = BaseApplication.getBaseApplication();
        baseApplication.getAppManager().addActivity(this);//将activity加入记录
        setContentView(getView());
        /*
         *  当FitsSystemWindows设置 true 时，会在屏幕最上方预留出状态栏高度的 padding
         */
        StatusBarUtil.setRootViewFitsSystemWindows(this,true);
        /*
         * 设置状态栏透明
         */
        StatusBarUtil.setTranslucentStatus(this);
        /*
         *一般的手机的状态栏文字和图标都是白色的, 可如果你的应用也是纯白色的, 或导致状态栏文字看不清
         *所以如果你是这种情况,请使用以下代码, 设置状态使用深色文字图标风格, 否则你可以选择性注释掉这个if内容
         */
        if (!StatusBarUtil.setStatusBarDarkTheme(this, true)) {
             /*如果不支持设置深色风格 为了兼容总不能让状态栏白白的看不清, 于是设置一个状态栏颜色为半透明,
             这样半透明+白=灰, 状态栏的文字能看得清
             */
            StatusBarUtil.setStatusBarColor(this,0x55000000);
        }
        StatusBarUtil.setRootViewFitsSystemWindows(this,false);
        if (!EventBus.getDefault().isRegistered(this)){ EventBus.getDefault().register(this); }//注册eventbus

    }

    @Override
    protected void onRestart() {
        super.onRestart();
        LUtils.e(TAG, "onRestart");
    }

    @Override
    protected void onStart() {
        super.onStart();
        LUtils.e(TAG, "onStart");
        String name=this.getClass().getName();
//        跨过欢迎页及登录页再获取设备权限
            if (!isInitView){
                getSourceData();
                initView();
                isInitView=true;
            }
    }

    @Override
    protected void onResume() {
        super.onResume();
        LUtils.e(TAG, "onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        LUtils.e(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        LUtils.e(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        LUtils.e(TAG, "onDestroy");
        baseApplication.getAppManager().finishActivity(this);//删除activity记录
        EventBus.getDefault().unregister(this);//解除接收
    }

    /**
     * //activity 设置页面视图
     */
    public abstract int getView();

    /**
     * //activity 初始化视图显示
     */
    public abstract void initView();

    /**
     * //activity 获取数据
     */
    public abstract void getSourceData();


    /**
     * eventbus 接收
     * @param messageEvent
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(MessageEvent messageEvent) {
    }

    /**
     * 返回双击退出
     */
    @Override
    public void onBackPressed() {
        if (baseApplication.getAppManager().getStartActivityNum()==1) baseApplication.exitBy2Click();
        else super.onBackPressed();
    }

    /**
     * 设置 app 不随着系统字体的调整而变化
     */
    @Override
    public Resources getResources() {
        Resources res = super.getResources();
        Configuration config=new Configuration();
        config.setToDefaults();
        res.updateConfiguration(config,res.getDisplayMetrics() );
        return res;
    }
}
